package controlador;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.DefaultListModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import negModel.*;
import vista.Mensajes;

public class ControladorCambiarPartes {
		private ControladorDeVentanas contVent;
		private CargarModelo modelo;
		private boolean parteNueva;
		private Mensajes mens;
		
	
	public ControladorCambiarPartes(ControladorDeVentanas controlador){
		contVent=controlador;
		parteNueva=false;
		modelo=new CargarModelo();
		mens=new Mensajes();
		
	}
		
	private class EscuchaBotonRemplazar implements ActionListener
	{	public void actionPerformed(ActionEvent e)
		{
			int indiceNuevas=contVent.ObtenerIndicePartesNuevas();
			int indiceUsadas=contVent.ObtenerIndicePartesUsadas();
			
			if ((indiceNuevas<0)&&(indiceUsadas<0))
				mens.sinSeleccionPartes();
			else{
			
				Parte unaParte;
				PersonajeJugador jugador=contVent.ObtenerJugador();
				
				if (parteNueva)	{			  
					unaParte=(Parte)jugador.getPartesNuevas().get(indiceNuevas);
					jugador.getPartesNuevas().remove(indiceNuevas);
				}
				
				else{
					unaParte=(Parte)jugador.getPartesUsadas().get(indiceUsadas);
					jugador.getPartesUsadas().remove(indiceUsadas);
				}
				Parte parteUsada=contVent.ObtenerTaller().ensamblarParte(jugador.getVehiculo(), unaParte);
				if (parteUsada != null){ 
					jugador.agregarParteUsada(parteUsada);
				}
				contVent.ActualizarListaPartesNuevas();
				contVent.ActualizarListaPartesUsadas();
				mens.parteEnsamblada();
			}
		}
	}

	public ActionListener getListenerBotonRemplazar() {
		return new EscuchaBotonRemplazar();
	}
	
	private class EscuchaBotonVolver implements ActionListener
	{	public void actionPerformed(ActionEvent e)
		{
			contVent.AbrirVentanaTaller();
			contVent.ActualizarDinero();
			contVent.ActualizarVistaTallerAutos();
			contVent.OcultarVentanaCambiarPartes();
		}
	}

	public ActionListener getListenerBotonVolver() {
		return new EscuchaBotonVolver();
	}
	
	

	public DefaultListModel CargarModeloPartesUsadas (){
		return modelo.CargarModeloPartes(contVent.ObtenerJugador().getPartesUsadas());
	}
	
	public DefaultListModel CargarModeloPartesNuevas (){
		
		return modelo.CargarModeloPartes(contVent.ObtenerJugador().getPartesNuevas());
		
	}
	
	private class EscuchaListaPartesNuevas implements ListSelectionListener
	{	public void valueChanged(ListSelectionEvent evt)
		{
	    	contVent.ActualizarListaPartesUsadas();
	    	parteNueva=true;
	    
	    }
	}

	public ListSelectionListener getListenerListaPartesNuevas() {
		return new EscuchaListaPartesNuevas();
	}
	
	private class EscuchaListaPartesUsadas implements ListSelectionListener
	{	public void valueChanged(ListSelectionEvent evt)
		{
			contVent.ActualizarListaPartesNuevas();
			parteNueva=false;
			
		}
	}

	public ListSelectionListener getListenerListaPartesUsadas() {
		return new EscuchaListaPartesUsadas();
	}
	

}
